package com.reminis.exceldemo.web;

import com.reminis.exceldemo.entity.TextInputDataDto;
import com.reminis.exceldemo.service.TextYejiService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@CrossOrigin("*") // 允许跨域请求（如果需要）
@RestController
@RequestMapping("/api/text-yeji") // 基础路径与前端API_BASE_URL匹配
public class TextYejiController {

    private static final Logger log = LoggerFactory.getLogger(TextYejiController.class);

    // 注入服务
    @Autowired
    private TextYejiService textYejiService;

    /**
     * 接收并写入粘贴的下单数据的端点。
     * 预期接收TextInputDataDto对象的JSON数组。
     * @param orderDataList 用户粘贴的下单数据列表。
     * @return ResponseEntity表示成功或失败。
     */
    @PostMapping("/write-orders")
    public ResponseEntity<Map<String, Object>> writeOrderData(@RequestBody List<TextInputDataDto> orderDataList) {
        log.info("收到通过文本输入写入下单数据的请求。数量: {}", orderDataList.size());
        Map<String, Object> response = new java.util.HashMap<>();
        try {
            // 调用服务方法
            textYejiService.processAndSaveOrderData(orderDataList);

            response.put("message", "下单数据处理成功！");
            response.put("code", 0); 
            return ResponseEntity.ok(response);

        } catch (IllegalArgumentException e) { // 捕获来自服务的特定验证错误
             log.error("收到无效的下单数据: {}", e.getMessage());
             response.put("message", "处理下单数据失败: " + e.getMessage());
             response.put("code", 1);
             return ResponseEntity.badRequest().body(response); // 对验证错误返回400 Bad Request
        } catch (Exception e) {
            log.error("处理粘贴的下单数据时出错", e);
             response.put("message", "处理下单数据时发生内部错误: " + e.getMessage());
             response.put("code", 1);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
        }
    }

    /**
     * 接收并写入粘贴的发货数据的端点。
     * 预期接收TextInputDataDto对象的JSON数组。
     * @param shipmentDataList 用户粘贴的发货数据列表。
     * @return ResponseEntity表示成功或失败。
     */
    @PostMapping("/write-shipments")
    public ResponseEntity<Map<String, Object>> writeShipmentData(@RequestBody List<TextInputDataDto> shipmentDataList) {
        log.info("收到通过文本输入写入发货数据的请求。数量: {}", shipmentDataList.size());
         Map<String, Object> response = new java.util.HashMap<>();
         try {
             // 调用服务方法
             textYejiService.processAndSaveShipmentData(shipmentDataList);

             response.put("message", "发货数据处理成功！");
             response.put("code", 0);
             return ResponseEntity.ok(response);

         } catch (IllegalArgumentException e) { // 捕获特定验证错误
             log.error("收到无效的发货数据: {}", e.getMessage());
             response.put("message", "处理发货数据失败: " + e.getMessage());
             response.put("code", 1);
             return ResponseEntity.badRequest().body(response); // 返回400
         } catch (Exception e) {
             log.error("处理粘贴的发货数据时出错", e);
             response.put("message", "处理发货数据时发生内部错误: " + e.getMessage());
             response.put("code", 1);
             return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
         }
    }

    /**
     * 触发生成/更新周业绩数据的端点。
     * 在发货数据成功写入并且用户确认后调用。
     * @return ResponseEntity表示生成过程的结果。
     */
    @PostMapping("/generate-yeji")
    public ResponseEntity<Map<String, Object>> generateYejiData() {
        log.info("收到生成周业绩数据的请求。");
         Map<String, Object> response = new java.util.HashMap<>();
        try {
            // 调用服务方法
            String resultMessage = textYejiService.generateAndUpdateYeji();

            response.put("message", resultMessage);
            response.put("code", 0);
            return ResponseEntity.ok(response);

        } catch (Exception e) {
            log.error("生成周业绩数据时出错", e);
             response.put("message", "生成周业绩数据时发生错误: " + e.getMessage());
             response.put("code", 1);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
        }
    }
} 